O uso de balanceadores (ou load balancer) passou a ser bem maior pela série de benefícios que nos trás, e um dos principais benefícios dele é a segurança, tendo um balanceador em uma rede controlará todos os acessos para que sejam centralizados e distribuidos, além de que o servdor mod_jk (módulo do apache) receberá toda a requisição e processará como entende, ou seja: Mesmo que seu outro servidor interno possua falhas de segurança possibilitando um bypass ou até mesmo um arquivo e PHP sem que tenha o interpretador instalado (o mod_jk, impede de que ele seja exibido).
Já um mês atrás o especialista em segurança da informação Alphan YAVAS publicou um bug encontrado no código do mod_jk, no qual ele possibilitava ter acesso a rota/jkstatus
, onde nela possui todas as informações das instâncias balanceadas, dando a possibilidade de realizar até mesmo algumas configurações relacionadas a ela!
O erro era no próprio código fonte do mod_jk especificamente no arquivo tomcat/jk/trunk/native/apache-2.0/mod_jk.c
, esse trecho contém a instrução de bloquear com que a entrada ../
seja interpretada como instrução (pois seria possível navegar através dos diretórios), e foi justamente aí que ele encontrou a falha, essa instrução não anularia nenhuma forma de concatenação de requisição, foi realizado o teste injetando justamente essas instruções, reportado como CVE o atuante acrescentou apenas ;
Acontece que sinais como: &
, ;
e =
são instruções aceitas para envio e recebimento e recebimento de dados HTTP, então tanto o browser entenderá aquilo como uma rota atuante quanto o servidor também compreenderá da mesma forma, uma forma de ver isso em um ambiente real já foi projetada pelo grupo immunIT e está disponível um docker-compose em https://github.com/immunIT/CVE-2018-11759.
O ataque em sua prática é apenas seguir o diretório inicial com /jkstatus&
, veja a saída em um teste:
E agora, após alterar a url apenas o ultimo caracter, temos:
Verifique se sua aplicação está vulnerável a essa exploração, usando esse projeto escrito em shellscript, para usar precisa apenas clonar o repositório e em seguida abrir o arquivo, então já poderá verificar seus ambientes. Para ser mais produtivo você pode usar todos os ambientes com um here-document no script, dessa forma:
O projeto está disponível em https://github.com/Jul10l1r4/Identificador-CVE-2018-11759 (o projeto principal está em notabug.org/Jul10l1r4/Identificador-CVE-2018-11759)
Caso queira de forma mais interativa é possível apenas executando o arquivo main
.
A versão na qual é possível fazer essa exploração dessa forma é da 1.2.0
a 1.2.44
, você está usando essa versão afetada? Uma das formas urgentes de solucionar esse problema é alterar a permissão de leitura do arquivo para que bloqueie aquele acesso, ou que ele requeira um determinado ip para que seja acessado.